package 蓝桥算法;
import 队列.LinkedListQueue;

public class day14 {
   class MyQueue{
      LinkedListQueue<Integer>deque=new LinkedListQueue<>(100);
      void poll(int value){
          if(!deque.isEmpty()&&deque.peek()==value){//最大值的弹出
              deque.poll();
          }
      }
      void add(int value){
          while(!deque.isEmpty()&&deque.peek()<value){
              deque.poll();//若新进去的值最大，则把其全部清空
          }
          deque.offer(value);
      }
      int peek(){//端口便是最大值
          return deque.peek();
      }
   }
   public int[] maxSlidingWindow(int[] nums,int k) {
       if (nums.length == 1) {
           return nums;
       }
       int num=0;
       MyQueue myQueue=new MyQueue();
       int[] res=new int[nums.length];
       for (int i = 0; i < k; i++) {
           myQueue.add(nums[i]);//添加前k个
       }
       res[num++]=myQueue.peek();//添加第一个最大值
       for (int i = k; i < nums.length; i++) {
           myQueue.poll(nums[i-k]);//移除前面的元素，防止有最大元素一直霸占
           //两个索引不同
           myQueue.add(nums[i]);//有序添加
           res[num++]=myQueue.peek();
       }
       return res;
   }
}
